package com.xbongbong.pro.message.model;

import com.xbongbong.message.domain.entity.PushEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * Description: PushModel interface
 * @author 魏荣杰
 * @date 2019/1/6 1:08
 * @version v1.0
 * @since v1.0
 */
public interface PushModel extends IModel<PushEntity>{
    @Override
    Integer insert(PushEntity entity) throws XbbException;

    @Override
    Integer update(PushEntity entity) throws XbbException;

    @Override
    List<PushEntity> findEntitys(Map<String, Object> param);

    @Override
    Integer getEntitysCount(Map<String, Object> param);

    /**
     * Description: 批量插入push的数据
     * @param pushList pushEntity的List
     */
    void insertBatch(List<PushEntity> pushList);

    /**
     * Description: 保存push的数据
     * @param entity PushEntity
     * @return java.lang.Integer 保存后的数据库id
     */
    Integer save(PushEntity entity);

    /**
     * Description: 根据id删除push数据
     * @param key 数据库id值
     * @param corpid 公司id
     * @return java.lang.Integer 操作的数据库id
     */
    Integer deleteByKey(Integer key, String corpid);

    /**
     * Description: 根据id获取push数据
     * @param key 数据库id值
     * @param corpid 公司id
     * @return com.xbongbong.message.domain.entity.PushEntity
     */
    PushEntity getByKey(Integer key, String corpid);

    /**
     * 获取提醒的refIdIn HashMap
     *
     * @param refIdIn
     * @param corpid
     * @param userId
     *
     * @return
     * @author tzl
     * @time 2017年1月17日 下午3:16:48
     */
    Map<Long, Integer> getRemindMap(List<Long> refIdIn,
                                       String corpid, String userId, Integer refEntity);

    /**
     * 获取提醒
     *
     * @param dataIdIn 业务id数组
     * @param corpid 公司id
     * @param businessType 业务类型
     * @param pushNotifyList 提醒业务id数组
     * @author 郑风
     * @date 2019/4
     * @since v1.0
     * @version v1.0
     * @update 2019/5/12 19:47 by zcp 从SaasListHelp移入
     */
    List<PushEntity> getPushNotify(Collection<Long> dataIdIn, String corpid, Integer businessType, Collection<Long> pushNotifyList);


    /**
     * 获取提醒
     *
     * @param dataIdIn 业务id数组
     * @param corpid 公司id
     * @param businessType 业务类型
     * @author 郑风
     * @date 2019/4
     * @since v1.0
     * @version v1.0
     * @update 2019/5/12 19:47 by zcp 从SaasListHelp移入
     */
    Collection<Long> getPushNotify(Collection<Long> dataIdIn, String corpid, Integer businessType);

    /**
     * 获取推送数量
     * 限制关联数据id，公司id业务类型，开始时间，结束时间
     *
     * @param dataId 数据id
     * @param corpid 公司id
     * @param businessType 业务类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return java.lang.Integer
     * @author 徐俊杰
     * @date 2019/6/6 15:38
     * @since v1.0
     */
    Integer getPushCount(Long dataId, String corpid, Integer businessType, Integer startTime, Integer endTime);

    /**
     * 获取提醒的查询条件
     * @param dataIdIn 业务id数组
     * @param corpid 公司id
     * @param businessType 业务类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return java.util.Map<java.lang.String,java.lang.Object>
     * @author zcp
     * @date 2019/6/11 11:11
     * @since v1.0
     * @version v1.0
     */
    Map<String, Object> pushNotifyParam(Collection<Long> dataIdIn, String corpid, Integer businessType, Integer startTime, Integer endTime);

    Integer deleteByIdIn(List<Long> pushIds, String corpid) throws XbbException;

    /**
     * 根据refId(关联的业务的具体表中的数据)去批量删除tb_push消息表中的消息
     *
     * @param dataIdList refId列表
     * @param corpid
     * @return
     */
    Integer deleteByRefIds(List<Long> dataIdList, String corpid);

    void deletePushNotify(List<Long> refIdIn, String corpid, Integer businessType) throws XbbException;

    /**
     * @Author mingliang
     * @Description 查询工作报告未提交提醒或逾期未提交提醒是否在规定时间中生成过数据
     * @Date 2022/6/2 11:13
     * @param corpid
     * @param todayInt
     * @param todayEndInt
     * @param subCode
     **/
    List<Long> getAlreadyProduceId(String corpid, Long todayInt, Long todayEndInt, Integer subCode, Integer type);
}

